package co.edu.uniandes.sd.interfaz;

import java.awt.GridLayout;
import java.awt.Rectangle;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

import com.toedter.calendar.JDateChooser;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import javax.swing.border.TitledBorder;
import java.awt.BorderLayout;
import javax.swing.JRadioButton;
import java.awt.CardLayout;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JTextPane;
import java.awt.FlowLayout;
import javax.swing.JScrollPane;
import javax.swing.JList;

public class PanelBusqueda extends JPanel implements Serializable, ActionListener
{

    private static final long serialVersionUID = 1L;

    public static final String BUSCAR = "Buscar";
    
    public static final String DESCARGAR = "Descargar";
    
    private JButton btnBuscar = null;

    private InterfazCliente interfaz;
    private FileTreePanel panelArbol;
    private JPanel panelBusquedaID;
    private JPanel panelBusquedaKW;
    private JPanel panelBusquedaS;
    private JPanel panelBusquedas;
    private JPanel panelTipoBusqueda;
    private JRadioButton rdbtnPorIdentificador;
    private JRadioButton rdbtnPorContenido;
    private JRadioButton rdbtnPorTamao;
    private JLabel lblIdDelArchivo;
    private JTextField txtIdArchivo;
    private JLabel lblPalabraClave;
    private JTextField txtPalabraClave;
    private JPanel panel_1;
    
    private ButtonGroup bg;
    private JLabel lblTamaoArchivo;
    private JTextField txtTamanioArchivo;
    private JPanel panelData;
    private JPanel panelResultados;
    private JList lstResultados;
    private JPanel panelBusquedasCampos;
    private JButton btnDescargar;

    /**
     * This is the default constructor
     */
    public PanelBusqueda( InterfazCliente i )
    {
        super( );
        interfaz = i;
        initialize( );
    }

    /**
     * This method initializes this
     * 
     * @return void
     */
    private void initialize( )
    {
        setLayout(new BorderLayout(0, 0));
        add(getPanelBusquedas());
        this.add( getBtnBuscar( ), BorderLayout.SOUTH );
        add(getPanel_2(), BorderLayout.WEST);
        bg = new ButtonGroup();
        bg.add(getRdbtnPorContenido());
        bg.add(getRdbtnPorIdentificador());
        bg.add(getRdbtnPorTamao());
    }

    /**
     * This method initializes btnEnviar
     * 
     * @return javax.swing.JButton
     */
    private JButton getBtnBuscar( )
    {
        if( btnBuscar == null )
        {
            btnBuscar = new JButton( );
            btnBuscar.setBounds( new Rectangle( 164, 183, 121, 27 ) );
            btnBuscar.setText( "Buscar" );
            btnBuscar.addActionListener( this );
            btnBuscar.setActionCommand( BUSCAR );
        }
        return btnBuscar;
    }

    private JPanel getPanelBusquedaID() {
		if (panelBusquedaID == null) {
			panelBusquedaID = new JPanel();
			panelBusquedaID.setBorder(new TitledBorder(null, "Busquedas por ID de Archivo", TitledBorder.LEADING, TitledBorder.TOP, null, null));
			panelBusquedaID.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
			panelBusquedaID.add(getLblIdDelArchivo());
			panelBusquedaID.add(getTxtIdArchivo());
		}
		return panelBusquedaID;
	}
	private JPanel getPanelBusquedaKW() {
		if (panelBusquedaKW == null) {
			panelBusquedaKW = new JPanel();
			panelBusquedaKW.setBorder(new TitledBorder(null, "Busquedas por Contenido", TitledBorder.LEADING, TitledBorder.TOP, null, null));
			panelBusquedaKW.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
			panelBusquedaKW.add(getLblPalabraClave());
			panelBusquedaKW.add(getTxtPalabraClave());
		}
		return panelBusquedaKW;
	}
	private JPanel getPanelBusquedaS() {
		if (panelBusquedaS == null) {
			panelBusquedaS = new JPanel();
			panelBusquedaS.setBorder(new TitledBorder(null, "Busquedas por Tama\u00F1o de Archivo", TitledBorder.LEADING, TitledBorder.TOP, null, null));
			panelBusquedaS.setLayout(new BorderLayout(0, 0));
			panelBusquedaS.add(getPanelArbol());
			panelBusquedaS.add(getPanel_2_1(), BorderLayout.NORTH);
		}
		return panelBusquedaS;
	}
	private JPanel getPanelBusquedas() {
		if (panelBusquedas == null) {
			panelBusquedas = new JPanel();
			panelBusquedas.setLayout(new GridLayout(1, 3, 0, 0));
			panelBusquedas.add(getPanelBusquedasCampos());
			panelBusquedas.add(getPanelBusquedaS());
			panelBusquedas.add(getPanelResultados());
		}
		return panelBusquedas;
	}
	private JPanel getPanel_2() {
		if (panelTipoBusqueda == null) {
			panelTipoBusqueda = new JPanel();
			panelTipoBusqueda.setBorder(new TitledBorder(null, "Tipo de B\u00FAsqueda", TitledBorder.LEADING, TitledBorder.TOP, null, null));
			panelTipoBusqueda.setLayout(new BorderLayout(0, 0));
			panelTipoBusqueda.add(getPanel_1());
		}
		return panelTipoBusqueda;
	}
	private JRadioButton getRdbtnPorIdentificador() {
		if (rdbtnPorIdentificador == null) {
			rdbtnPorIdentificador = new JRadioButton("Por Identificador");
			rdbtnPorIdentificador.setSelected(true);
		}
		return rdbtnPorIdentificador;
	}
	private JRadioButton getRdbtnPorContenido() {
		if (rdbtnPorContenido == null) {
			rdbtnPorContenido = new JRadioButton("Por Contenido");
		}
		return rdbtnPorContenido;
	}
	private JRadioButton getRdbtnPorTamao() {
		if (rdbtnPorTamao == null) {
			rdbtnPorTamao = new JRadioButton("Por Tama\u00F1o");
		}
		return rdbtnPorTamao;
	}
	private JLabel getLblIdDelArchivo() {
		if (lblIdDelArchivo == null) {
			lblIdDelArchivo = new JLabel("Id del Archivo");
		}
		return lblIdDelArchivo;
	}
	private JTextField getTxtIdArchivo() {
		if (txtIdArchivo == null) {
			txtIdArchivo = new JTextField();
			txtIdArchivo.setColumns(10);
		}
		return txtIdArchivo;
	}
	private JLabel getLblPalabraClave() {
		if (lblPalabraClave == null) {
			lblPalabraClave = new JLabel("Palabra Clave");
		}
		return lblPalabraClave;
	}
	private JTextField getTxtPalabraClave() {
		if (txtPalabraClave == null) {
			txtPalabraClave = new JTextField();
			txtPalabraClave.setColumns(10);
		}
		return txtPalabraClave;
	}
	private JPanel getPanel_1() {
		if (panel_1 == null) {
			panel_1 = new JPanel();
			panel_1.setLayout(new GridLayout(3, 1, 0, 0));
			panel_1.add(getRdbtnPorIdentificador());
			panel_1.add(getRdbtnPorContenido());
			panel_1.add(getRdbtnPorTamao());
		}
		return panel_1;
	}
	private JLabel getLblTamaoArchivo() {
		if (lblTamaoArchivo == null) {
			lblTamaoArchivo = new JLabel("Tama\u00F1o Archivo");
		}
		return lblTamaoArchivo;
	}
	private JTextField getTxtTamanioArchivo() {
		if (txtTamanioArchivo == null) {
			txtTamanioArchivo = new JTextField();
			txtTamanioArchivo.setColumns(10);
		}
		return txtTamanioArchivo;
	}
	
	private FileTreePanel getPanelArbol() {
		if (panelArbol == null) {
			panelArbol = new FileTreePanel(interfaz, false, 0);
		}
		return panelArbol;
	}
	private JPanel getPanel_2_1() {
		if (panelData == null) {
			panelData = new JPanel();
			panelData.add(getLblTamaoArchivo());
			panelData.add(getTxtTamanioArchivo());
		}
		return panelData;
	}

	public void actualizarTamanioArchivo(long length) 
	{
		getTxtTamanioArchivo().setText(""+length);		
	}
	
	private JPanel getPanelResultados() {
		if (panelResultados == null) {
			panelResultados = new JPanel();
			panelResultados.setBorder(new TitledBorder(null, "Resultados", TitledBorder.LEADING, TitledBorder.TOP, null, null));
			panelResultados.setLayout(new BorderLayout(0, 0));
			JScrollPane scrollPane = new JScrollPane(getList_1());
			panelResultados.add(scrollPane);
			panelResultados.add(getBtnDescargar(), BorderLayout.SOUTH);
		}
		return panelResultados;
	}
	private JList getList_1() {
		if (lstResultados == null) {
			lstResultados = new JList();
		}
		return lstResultados;
	}
	private JPanel getPanelBusquedasCampos() {
		if (panelBusquedasCampos == null) {
			panelBusquedasCampos = new JPanel();
			panelBusquedasCampos.setLayout(new GridLayout(2, 1, 0, 0));
			panelBusquedasCampos.add(getPanelBusquedaID());
			panelBusquedasCampos.add(getPanelBusquedaKW());
		}
		return panelBusquedasCampos;
	}

	public void actionPerformed( ActionEvent e )
	{
	    String c = e.getActionCommand( );
	    
	    if( c.equals( BUSCAR ) )
	    {
	        if(getRdbtnPorContenido().isSelected())
	        {
	        	interfaz.buscarPorContenido(getTxtPalabraClave().getText());
	        }
	        else if(getRdbtnPorIdentificador().isSelected())
	        {
	        	interfaz.buscarPorIdentificador(getTxtIdArchivo().getText());
	        }
	        else if(getRdbtnPorTamao().isSelected())
	        {
	        	interfaz.buscarPorTamanio(getTxtTamanioArchivo().getText());
	        }
	    }
	    else if( c.equals( DESCARGAR ) )
	    {
	    	interfaz.descargarArchivo(getList_1().getSelectedValue());
	    }
	}

	public void actualizarListaResultados(ArrayList<String> darArchivosBusqueda) {
		getList_1().setListData(darArchivosBusqueda.toArray());
	}

	public void refresh()
	{
		panelArbol.refresh();
		// TODO Auto-generated method stub
		
	}
	private JButton getBtnDescargar() {
		if (btnDescargar == null) {
			btnDescargar = new JButton("Descargar");
			btnDescargar.addActionListener( this );
			btnDescargar.setActionCommand( DESCARGAR );
		}
		return btnDescargar;
	}
}
